package com.itlaobing.core;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * 1、Statement接口 中声明的 executeQuery( String ) 通常被用来执行 查询语句 ( SELECT )
 * 2、executeQuery( String ) 方法的返回结果是 java.sql.ResultSet 类型 ( 该类型的实例通常被称作 结果集对象 )
 * 3、java.sql.ResultSet接口 没有继承 java.util.Set 接口 ，所以 ResultSet 不属于 Java Collection Framework ( Java集合框架 )
 */
public class ExecuteQuery {
    public static void main(String[] args) throws SQLException {

        JdbcUtils jdbcUtils = JdbcUtils.getInstace(DatabaseType.MYSQL);

        jdbcUtils.load();
        Connection connection = jdbcUtils.connection();
        Statement statement = jdbcUtils.statement(connection);

        String sql = "SELECT id , name FROM t_user ORDER BY id DESC";

        ResultSet resultSet = statement.executeQuery(sql);
        /* * * 处理返回结果 (这里是遍历结果集) * * * * * * * * * * * * * * */
        // next()方法会导致 结果集中的 指针 向下移动一行，并判断改行是否有数据(若有数据则返回true)
        while( resultSet.next() ) {
            // int id = resultSet.getInt( 1 ); // 根据列的索引获取当前行指定列的值
            // String name = resultSet.getString( 2 ) ; // 根据列的索引获取当前行指定列的值

            int id = resultSet.getInt( "id" ) ; // 根据 列名 或 列别名 获取当前行指定列的值
            String name = resultSet.getString( "name" ) ; // 如果查询语句中指定了列的别名则只能使用列的别名            System.out.println(id + ":" + name);
        }

        resultSet.close();
        jdbcUtils.release(statement,connection);
    }
}
